home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Database / QuickApp / Controller.m < prev    next >
Text File  |  1995-06-12  |  2KB  |  85 lines

  1. /* Controller.m:
  2.  * A quick demo of how to get around a problem with qualifiers that include
  3.  * reference to attributes from a one-to-one relationship.
  4.  *
  5.  * You may freely copy, distribute, and reuse the code in this example.
  6.  * NeXT disclaims any warranty of any kind, expressed or  implied, as to its
  7.  * fitness for any particular use.
  8.  *
  9.  * Written by: Mai Nguyen, NeXT Developer Support
  10.  *
  11.  *
  12.  */
  13. #import "Controller.h"
  14.  
  15. #define INSTALL_MODEL NXLocalizedString("Please install OracleDemo.dbmodel into your ~/Library/Databases directory and restart.", NULL, "Notify user that OracleDemo.dbmodel must be installed in his local Databases directory.")
  16.  
  17. @implementation Controller
  18. /*
  19. * Extract the actual database and recordlist from the DBModule UI Object
  20. */ 
  21. -appDidInit:sender
  22. {    
  23.     /*  Notify the user if the database can't be found */
  24.     if (!(dbDatabase = [DBDatabase findDatabaseNamed:"OracleDemo" connect:YES])) {
  25.         NXRunAlertPanel(NULL,INSTALL_MODEL, "OK", NULL, NULL);
  26.         return self;
  27.     }
  28.     [dbDatabase setDelegate:self];            
  29.     dbFetchGroup = [dbModule rootFetchGroup];
  30.     rootEntity = [dbDatabase entityNamed:"Order"];
  31.         /* Another workaround is to do this via a connection from the 
  32.          * relationship attribute to the File's Owner. Then, you don't
  33.          * need to add an expression explicitly, and the next 2 lines
  34.          * of code are no longer needed.
  35.          */
  36.     dbExpression = [[DBExpression alloc] initForEntity: rootEntity
  37.                     fromDescription:"customer.customerID"];
  38.     [dbFetchGroup addExpression:dbExpression];
  39.  
  40.     dbQualifier = [[DBQualifier alloc] initForEntity:rootEntity 
  41.             fromDescription:"customer.state = %s", "CA"];
  42.     
  43.     [dbFetchGroup fetchContentsOf:rootEntity usingQualifier:dbQualifier];
  44.     [dbQualifier free];
  45.     [dbTableView display];
  46.     return self;
  47. }
  48.  
  49. - fetch:sender
  50. {
  51.     const char * newState;
  52.     
  53.     newState = (const char *)[inputField stringValue];
  54.     if ( !(strcmp(newState, "")) )
  55.         dbQualifier = nil;
  56.     else
  57.         dbQualifier = [[DBQualifier alloc] initForEntity:rootEntity
  58.                 fromDescription: "customer.state = %s", newState];
  59.     [dbFetchGroup fetchContentsOf:rootEntity usingQualifier:dbQualifier];
  60.     [dbQualifier free];
  61.     [dbTableView display];
  62.     return self;
  63. }
  64.  
  65. - free
  66. {
  67.     if (dbQualifier)
  68.         [dbQualifier free];
  69.     if (dbExpression)
  70.         [dbExpression free];
  71.     return[super free];
  72. }
  73.  
  74. /* DBDatabase delegate methods to log error messages and SQL queries */
  75.  
  76. - (BOOL)db:aDb willEvaluateString:(const char*)aString usingBinder:aBinder
  77. {
  78.     fprintf(stderr, "SQL query:%s\n", aString);
  79.     return YES;
  80. }
  81.  
  82.  
  83.  
  84. @end
  85.